package com.linx.common.core.enums.alarm;

import com.linx.common.core.domain.model.DictEnumBody;
import lombok.Getter;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;


/**
 * 告警类别字典
 */
@Getter
public enum AlarmCategoryDictEnum {

    安防告警("1", 1, "安防告警"),
    消防告警("2", 2, "消防告警"),
    能耗告警("3", 3, "能耗告警"),
    环境告警("4", 4, "环境告警"),
    设施告警("5",  5, "设施告警"),
    资产告警("6",  6, "资产告警"),
    通行告警("7",  7, "通行告警"),
    其他告警("99",  99, "其他告警"),
    ;

    private final String code;

    private final Integer sort;

    private final String label;

    AlarmCategoryDictEnum(String code, Integer sort, String label) {
        this.code = code;
        this.sort = sort;
        this.label = label;
    }

    /**
     *  获取枚举列表
     */
    public static List<DictEnumBody> list() {
        List<DictEnumBody> libEnumVOList = new ArrayList<>();
        Class<AlarmCategoryDictEnum> enumClass = AlarmCategoryDictEnum.class;

        try {
            Method getCode = enumClass.getMethod("getCode");
            Method getSort = enumClass.getMethod("getSort");
            Method getLabel = enumClass.getMethod("getLabel");

            //  通过反射取出Enum所有常量的属性值
            for (AlarmCategoryDictEnum enumConstant: enumClass.getEnumConstants()) {
                String code = (String) getCode.invoke(enumConstant);
                Integer sort = (Integer) getSort.invoke(enumConstant);
                String label = (String) getLabel.invoke(enumConstant);

                libEnumVOList.add(new DictEnumBody(code, sort, label, null));
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        return libEnumVOList;
    }

    /**
     * 根据code获取label
     */
    public static String getLabelByCode(String code) {
        for (AlarmCategoryDictEnum item: AlarmCategoryDictEnum.values()) {
            if (item.getCode().equals(code)) {
                return item.getLabel();
            }
        }
        return null;
    }

}
